package day06.sparksql

import java.util.Properties

import org.apache.spark.sql.{DataFrame, SparkSession}

object SparkSQLDemo_1 {
  def main(args: Array[String]): Unit = {
    val spark: SparkSession = SparkSession.builder().appName("SparkSQLDemo_1").master("local[2]").getOrCreate()
    import spark.implicits._
    val df: DataFrame = spark.read.json("E://大数据培训视频/spark/sparkcoursesinfo/spark/data/people.json")

    df.show()
//    df.select("name","age").show()
//
//    df.select($"name",$"age"+1,$"facevalue").show()
//    df.select("name","age","facevalue").where($"age">20).show()
//    df.select("name","age","facevalue").where("age>30").show()
//    df.filter("age>20").show()
//    df.filter($"age">20).show()
//
      df.groupBy("age").count().show()
      df.createOrReplaceTempView("t_person")
      val sqlDF: DataFrame = spark.sql("select * from t_person")
      //sqlDF.show(2)

      println(sqlDF.schema)
      //打印改数据的描述信息(元数据)，如：age: long (nullable = true) 代表name字段是long类型，nullable=true为该字段可以为null
      df.printSchema()//StructType(StructField(age,LongType,true), StructField(facevalue,LongType,true), StructField(name,StringType,true))

//      sqlDF.write.mode("append").json("E://data")
//      sqlDF.write.mode("append").csv("E://data/out1")
//      //输出到数据库的某表里，jdbc的参数为：url: String, table: String, connectionProperties: Properties
//      //第一个参数url的格式为：jdbc:mysql://主机IP:3306/数据库名
//      //第二个参数为数据库名.表名   //数据库中没有这个表，会自动创建这个表，因此不需要提前创建好该表
//      //第三个参数为 new Properties()，往里面put(k,v)两次,k分别是其中uer和password
//      val prop = new Properties()
//      prop.put("user", "root")
//      prop.put("password", "123456")
//      sqlDF.write.mode("append").jdbc("jdbc:mysql://localhost:3306/bigdata","bigdata.person", prop)
  }
}
